home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / 68343ffp.arc / FFPIFP.SA < prev    next >
Text File  |  1989-08-30  |  3KB  |  66 lines

  1.       TTL     FAST FLOATING POINT INTEGER TO FLOAT (FFPIFP)
  2. ************************************
  3. * (C) COPYRIGHT 1980 MOTORLA INC.  *
  4. ************************************
  5.  
  6. ***********************************************************
  7. *               INTEGER TO FLOATING POINT                 *
  8. *                                                         *
  9. *      INPUT: D7 = FIXED POINT INTEGER (2'S COMPLEMENT)   *
  10. *      OUTPUT: D7 = FAST FLOATING POINT EQUIVALENT        *
  11. *                                                         *
  12. *      CONDITION CODES:                                   *
  13. *                N - SET IF RESULT IS NEGATIVE            *
  14. *                Z - SET IF RESULT IS ZERO                *
  15. *                V - CLEARED                              *
  16. *                C - UNDEFINED                            *
  17. *                X - UNDEFINED                            *
  18. *                                                         *
  19. *      D5 IS DESTROYED                                    *
  20. *                                                         *
  21. *      INTEGERS OF GREATER THAN 24 BITS WILL BE ROUNDED   *
  22. *      AND IMPRECISE.                                     *
  23. *                                                         *
  24. *      CODE SIZE: 56 BYTES      STACK WORK AREA: 0 BYTES  *
  25. *                                                         *
  26. *      TIMINGS: (8MHZ NO WAIT STATES ASSUMED)             *
  27. *         COMPOSITE AVERATE 31.75 MICROSECONDS            *
  28. *            ARG = 0   4.25          MICROSECONDS         *
  29. *            ARG > 0   13.75 - 47.50 MICROSECONDS         *
  30. *            ARG < 0   15.50 - 50.25 MICROSECONDS         *
  31. *                                                         *
  32. ***********************************************************
  33.          PAGE
  34.       XDEF    FFPIFP      EXTERNAL NAME
  35.       XREF    FFPCPYRT    COPYRIGHT NOTICE
  36.  
  37. FFPIFP IDNT    1,1  FFP INTEGER TO FLOAT
  38.  
  39.          SECTION  9
  40.  
  41. FFPIFP   MOVE.L  #64+31,D5  SETUP HIGH END EXPONENT
  42.          TST.L   D7         ? INTEGER A ZERO
  43.          BEQ.S   ITORTN     RETURN SAME RESULT IF SO
  44.          BPL.S   ITOPLS     BRANCH IF POSITIVE INTEGER
  45.          MOVE.L  #-32,D5    SETUP NEGATIVE HIGH EXPONENT -#80+64+32
  46.          NEG.L   D7         FIND POSITIVE VALUE
  47.          BVS.S   ITORTI     BRANCH MAXIMUM NEGATIVE NUMBER
  48.          SUB.B   #1,D5       ADJUST FOR EXTRA ZERO BIT
  49. ITOPLS   CMP.L     #$00007FFF,D7 ? POSSIBLE 17 BITS ZERO
  50.          BHI.S     ITOLP     BRANCH IF NOT
  51.          SWAP.W    D7        QUICK SHIFT BY SWAP
  52.          SUB.B     #16,D5    DEDUCT 16 SHIFTS FROM EXPONENT
  53. ITOLP    ADD.L   D7,D7      SHIFT MANTISSA UP
  54.          DBMI    D5,ITOLP   LOOP UNTIL NORMALIZED
  55.          TST.B     D7        ? TEST FOR ROUND UP
  56.          BPL.S     ITORTI    BRANCH NO ROUNDING NEEDED
  57.          ADD.L     #$100,D7  ROUND UP
  58.          BCC.S     ITORTI    BRANCH NO OVERFLOW
  59.          ROXR.L    #1,D7     ADJUST DOWN ONE BIT
  60.          ADD.B     #1,D5     REFLECT RIGHT SHIFT IN EXPONENT BIAS
  61. ITORTI   MOVE.B  D5,D7      INSERT SIGN/EXPONENT
  62. ITORTN   RTS                RETURN TO CALLER
  63.  
  64.          END
  65.  
  66.